127.0.0.1 と 0.0.0.0 の違い
127.0.0.1 はローカルループバックインターフェースのIPアドレス
IPを持つ全てのコンピューターには、自分自身のアドレスとして 127.0.0.1 が設定されている
つまり、どのコンピューターでも 127.0.0.1 は自分自身を指す
0.0.0.0 は全インターフェースに対してbindするという意味
自分自身という意味ではない
https://gyazo.com/eb658de00adabe491ec8dffe03405b3e
手元のPCでDjangoを起動する
code:bash
(venv) $ python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
August 24, 2018 - 14:55:45
Django version 2.1, using settings 'testproj.settings'
Quit the server with CONTROL-C.
開発サーバーでDjangoを起動する
開発サーバーのIPは 192.168.99.1 とする
Djangoを 192.168.99.1:8000 で起動しなおす
code:bash
(venv) $ python manage.py runserver 192.168.99.1:8000
Performing system checks...
System check identified no issues (0 silenced).
August 24, 2018 - 15:01:49
Django version 2.1, using settings 'testproj.settings'
Quit the server with CONTROL-C.
違いは?
127.0.0.1:8000 は ローカルループバックネットワークI/Fにbind
192.168.99.1 はeth1などのネットワークI/Fにbind
ローカルループバックはそのマシン内部からの通信にだけ使われる
192.168.99.1 に繋がっているネットワークからの通信を受け取るには192.168.99.1にbindする
全てのネットワークインターフェースにbindするには 0.0.0.0 を指定
127.0.0.1 にも 192.168.99.1 にもbindする。
他のネットワークにも繋がっていればそっちにもbindされる
想定外のネットワークに繋がる可能性もある
PC内の仮想マシンでDjangoを起動する
PCにとってのlocalhostは、仮想マシンにとってのlocalhostではない
Djangoサーバーは 127.0.0.1 にbindしているのでNG
仮想マシンの8000ポートをローカルの8000ポートにポートフォワードする
TBD: 絵で説明
仮想マシン内の 127.0.0.1:8000 を ホストマシン(PC)の 127.0.0.1:8000 に繋ぐ
繋がらない?
仮想マシン内のDjangoサーバーを 127.0.0.1:8000 で起動しよう
ssh接続したサーバーの場合
開発サーバーの任意のポートを接続元PCのポートに繋げられる
VirtualBoxのポートフォワード設定と同じ概念
ssh -L 8000:localhost:8000 server.example.com
接続先は server.example.com
接続元PCの 8000 ポートを、接続先からみて localhost:8000 に繋ぐ